package initconf

import (
	"strconv"
	"time"

	"github.com/gomodule/redigo/redis"
)

var RedisPool *redis.Pool

func InitRedis() {
	// 实例化连接池
	redisPwd := Conf.RedisConfig.Password                                              // 密码
	redisHostPort := Conf.RedisConfig.Host + ":" + strconv.Itoa(Conf.RedisConfig.Port) // 地址和端口
	RedisPool = &redis.Pool{
		MaxIdle:     10,  // 最初的连接数量
		MaxActive:   0,   // 连接池最大连接数量,不确定可以用0（0表示自动定义），按需分配
		IdleTimeout: 300, // 连接关闭时间 300秒 （300秒不使用自动关闭）
		Dial: func() (redis.Conn, error) { //要连接的redis数据库
			return redis.Dial("tcp", redisHostPort,
				redis.DialConnectTimeout(time.Second*10),
				redis.DialPassword(redisPwd))
		},
	}
}

func Wredis(f func(conn redis.Conn)) {
	conn := RedisPool.Get()
	defer conn.Close()
	f(conn)
}

func Rredis(commandName string, args ...interface{}) (reply interface{}, err error) {
	conn := RedisPool.Get()
	defer conn.Close()
	// 因为args是一个切片 第二个参数是要传多个参数 可以这么写
	do, err := conn.Do(commandName, args...)
	return do, err
}
